package com.hejing.Collection工具类的使用;

import org.junit.Test;

import java.util.*;

/**
 * ClassName: CollectionsTest
 * Package: com.hejing.Collection工具类的使用
 * Description:
 *
 * @Author: HeJing
 * @Create: 2023-05-20 20:12
 * @Version: 1.0
 */
public class CollectionsTest {
    @Test
    public void test01(){
        List list = Arrays.asList(24, 32, 12, 3, -10, 232, 232);
        System.out.println(list);

        // 倒序
        Collections.reverse(list);
        System.out.println(list);

        // 升序
        Collections.sort(list);
        System.out.println(list);

        // 降序: 定制排序
        Collections.sort(list, new Comparator() {
           @Override
           public int compare(Object o1, Object o2) {
               if(o1 instanceof Integer && o2 instanceof Integer) {
                   Integer i1= (Integer) o1;
                   Integer i2= (Integer) o2;

                   return -(i1 - i2);
               }
               throw new RuntimeException("类型不匹配");
           }
        });
        System.out.println(list);
    }

    @Test
    public void test02(){
        List list = Arrays.asList(24, 32, 12, 3, -10, 232, 232);

        System.out.println(Collections.max(list));  // 返回 232

        System.out.println(Collections.min(list, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                if(o1 instanceof Integer && o2 instanceof Integer) {
                    Integer i1 = (Integer) o1;
                    Integer i2 = (Integer) o2;

                    return -(i1 - i2);
                }
                throw new RuntimeException("类型不匹配");
            }
        }));  // 同样返回232
    }

    /**
     * copy测试
     */
    @Test
    public void test03(){
        List src = Arrays.asList(24, 32, 12, 3, -10, 232, 232);

        // 错误写法，尺寸size不符合
        // List dest = new ArrayList();

        // 正确写法:
        List dest = Arrays.asList(new Object[src.size()]);

        Collections.copy(dest, src);
        System.out.println(dest);

    }

    /**
     * unmodifiableXxx()方法测试
     */
    @Test
    public void test04(){

        List list1 = new ArrayList();
        // list1 可以写入数据
        list1.add(12);
        list1.add(122);
        list1.add(1112);

        System.out.println("*****************");
        // list2只能读不能写
        List list2 = Collections.unmodifiableList(list1);
        // list2.add(33); // 不能写
        System.out.println(list2.get(0)); // 可以读
    }

    /**
     * 测试: Collections提供了多个synchronizedXxx()方法用以解决线程安全问题。
     */
    @Test
    public void test05(){

        // list01 线程不安全
        List list01 = new ArrayList();

        // list02 线程安全
        List list02 = Collections.synchronizedList(list01);

        // map01 线程不安全
        HashMap map01 = new HashMap();

        // map02 线程安全
        Map map02 = Collections.synchronizedMap(map01);
    }
}




















